LinuC-1 - 102試験 - 1.09:重要なシステムサービス - 1.09.1 システム時刻の管理

Last Update : January 02 2021 16:07:27

     

a. システムクロック

Linuxには、「ハードウェアクロック」と「システムクロック」という2つの時計があります。

ハードウェアクロックとは、マザーボード上のLSIに搭載された内部時計で、PCの電源を切った状態でも時刻を刻み続けます。時刻をCMOSに保存するので、「CMOS時計」と呼ばれたり、「リアルタイムクロック(RTC)」「BIOS クロック」「CMOS クロック」などと呼ばれることもあります。

システムクロックとは、Linuxのカーネルが管理している時計で、システム起動時に1度だけハードウェアクロックから時間を参照し、それ以降Linuxではシステムクロックが基準となる(つまり、dateコマンドなどで表示される時刻は、常にシステムクロックです)。システムクロックは、「カーネル時計」、「ソフトウェア時計」と呼ばれることもあります。

Linux は、システムが起動する時に一度だけハードウェアクロックを参照し、その時刻をシステムクロックに設定します。 これは、Linux が起動するたびに行われる動作であり、ハードウェアクロックがおかしな時刻になっていると、システムクロックも同様におかしな時刻を表示します。 従って、システムクロックの値がおかしいからといって、システムクロックだけを設定しなおしても、ハードウェアクロックを書き換えない限りは、再起動するたびにシステムクロックを再設定し直さなければなりません。 そこで、クロックを設定する時には、以下のいずれかの順で設定します。

  • ハードウェアクロックを設定し、システムクロックをこれに同期させる
  • システムクロックを設定し、ハードウェアクロックをこれに同期させる

一つ目の手順では、ハードウェアクロックを先に書き換えるので、ハードウェアクロック設定後は次回起動時に自動的にシステムクロックが同期されます(再起動しないで同期させる事もできます)。 二つ目の手順では、システムクロックを設定しただけでは再起動したときに設定内容が初期化されるので、きちんとハードウェアクロックも書き換える必要があります。 どちらの方法でも、正確な時刻を取得する場合には、公開されているNTP サーバを利用します。 NTP サーバを利用しない場合には、自分で他の時計を参照して時刻を設定します。 尚、クロックの設定はroot 権限でなければ実行できません。


1. ハードウェアクロックの設定方法

ハードウェアクロックを扱うには、clock コマンドといくつかのオプションを使用します。 以下に、ハードウェアクロック関連のコマンドとオプションの例を示します。 尚、clock コマンドと hwclock コマンドは同じものとして扱います。

● clock コマンド構文
  clock [オプション]

● clock コマンド オプション
 -u 世界標準時(UTC)として扱う
 -r または --show ハードウェアクロックを表示する
 -w または --systohc ハードウェアクロックにシステムクロックを書き込む
 -s または --hctosys ハードウェアクロックをシステムクロックに書き込む
 --set --date ハードウェアクロックに任意の日時を設定する
 -h または --help ヘルプを表示する

上記のように、-s オプションと -w オプションは逆を示すので注意してください。 また、オプションを指定しない場合には、ハードウェアクロックが表示されます。 以下に、使用例をいくつか示します。 ハードウェアクロックを表示させるには、次のようにします。

# clock 2012年12月22日 15時01分29秒 -0.824783 秒

ハードウェアクロックに任意の日時を設定するには、次のようにします。 この例では、2005年12月22日、15:03に設定しています。 設定を入力するとすると、設定内容が表示されます。

# date --set="2012/12/22 15:03" 2012年 12月 22日 木曜日 15:03:00 JST

ハードウェアクロックを基準にする場合には、システムクロックをこれに合わせなければなりません。 先に述べたように、システムクロックはOS を再起動すれば起動時にハードウェアクロックに同期しますが、直ぐに同期させたい場合には次のようにします。

# clock -s

また、システムクロックを基準にした場合には、ハードウェアクロックにシステムクロックを書き込まなければなりません。 次のようなコマンドで、システムクロックをハードウェアクロックに書き込みます。 書き込んだ後は、システムクロックを表示するdate コマンドを使用すれば、同期されているか確認できます。

# clock -w


2. システムクロックの設定方法

システムクロックを扱うには、date コマンドといくつかのオプションを使用します。 以下に、システムクロック関連のコマンドとオプションの例を示します。

● date コマンド構文
  date [オプション]


● date オプション
 -u 世界標準時(UTC)として扱う
 -s または--set システムクロックに任意の時刻を設定する
 --help ヘルプを表示する

オプションを指定しない場合には、システムクロックが表示されます。 以下に、使用例をいくつか示します。 システムクロックを表示させるには、次のようにします。

# date 2012年 12月 22日 木曜日 15:01:24 JST

システムクロックに任意の日時を設定するには、次のようにします。 この例では、2005年12月22日、15:03に設定しています。 指定する日時は、一般的な形式ならば良いようです。 設定を入力するとすると、設定内容が表示されます。

# date --set="15:03" 2012年 12月 22日 木曜日 15:03:00 JST

# date --set="2012/12/22 15:03" 2012年 12月 22日 木曜日 15:03:00 JST

システムクロックを基準にする場合には、ハードウェアクロックをこれに合わせなければなりません。 ハードウェアクロックをシステムクロックに同期させるには、先に述べた clock -w コマンドを使用します。
また、ハードウェアクロックとシステムクロックを同時に表示したい場合には、シェルの機能を使用して、次のようにします。 セミコロンを利用する事で、複数のコマンドを続けて入力する事ができます。

# date;clock 2012年 12月 22日 木曜日 15:04:22 JST 2012年12月22日 15時04分22秒 -0.847888 秒

# clock;date 2012年12月22日 15時05分05秒秒 -0.938274 秒 2012年 12月 22日 木曜日 15:05:05 JST


b. NTPによる時刻設定

どちらの時計もあまり正確ではないので、正しい時刻を知る必要がある場合は、外部のNTPサーバから正確な時間を入手し、それをハードウェアクロックに反映させる必要があります。時刻の設定には、root権限が必要なので、rootでログインして、以下のコマンドを実行します。

# ntpdate NTPサーバ名 # hwclock --systohc

「hwclock --systohc」というコマンドは、ntpdateコマンドで更新されたシステムクロックの時刻を、ハードウェアクロックに設定します。これにより、システムクロックとハードウェアクロックがほぼ同期することになります。
日本のNTPサーバとしては、福岡大学(clock.nc.fukuoka-u.ac.jp)が有名ですが、最近ではISPなども独自のNTPサーバを公開しているので、最寄りのNTPサーバにアクセスするようにします。


z. 出題範囲概要

概要 :
  • システム時刻を適切に維持し、NTPやchronyによって時計を同期できる。

詳細 :
  • システムの日付および時刻を設定する。
    date
  • ハードウェアの時計に時刻を設定する。
    hwclock
  • 正しいタイムゾーンを設定する。
    /usr/share/zoneinfo/, /etc/timezone, /etc/localtime
    TZ, tzselect, timedatectl
  • 基本的なNTP設定
    ntpd, ntpdate, ntp.conf
    chronyd, chronyc, chrony.conf
  • 公的な標準 NTP サーバーを使用できる。
    pool.ntp.org
  • ntpq コマンドについて知っている。

  [ 例題 ] 


         

    www.it-shikaku.jp